package cc.rengu.igas.channel.esb.facade;

import cc.rengu.igas.channel.esb.facade.request.*;
import cc.rengu.igas.channel.esb.facade.response.*;
import cc.rengu.igas.channel.esb.facade.result.Result;

/**
 * 支付通道调用核心的服务
 *
 * @author wangcheng
 */
public interface BankCoreService {

    /**
     * 核心账户余额查询接口
     *
     * @param coreAcctBalanceQueryRequest 余额查询请求信息
     * @return 余额查询应答信息
     */
    Result<CoreAcctBalanceQueryResponse> coreAcctBalanceQuery(CoreAcctBalanceQueryRequest coreAcctBalanceQueryRequest);

    /**
     * 核心消费接口
     *
     * @param coreConsumeRequest 消费请求信息
     * @return 消费应答信息
     */
    Result<CoreConsumeResponse> coreConsume(CoreConsumeRequest coreConsumeRequest);

    /**
     * 核心消费冲正接口
     *
     * @param coreConsumeResvalRequest 消费冲正请求信息
     * @return 消费冲正应答信息
     */
    Result<CoreConsumeResvalResponse> coreConsumeRevsal(CoreConsumeResvalRequest coreConsumeResvalRequest);

    /**
     * 核心消费撤销接口
     *
     * @param coreConsumeCancelRequest 消费撤销请求信息
     * @return 消费撤销应答
     */
    Result<CoreConsumeCancelResponse> coreConsumeCancel(CoreConsumeCancelRequest coreConsumeCancelRequest);

    /**
     * 核心消费撤销冲正接口
     *
     * @param coreConsumeCancelResvalRequest 消费撤销冲正请求信息
     * @return 消费撤销冲正应答
     */
    Result<CoreConsumeCancelResvalResponse> coreConsumeCancelRevsal(CoreConsumeCancelResvalRequest coreConsumeCancelResvalRequest);

    /**
     * 核心消费退货
     *
     * @param coreConsumeRefundRequest 退货请求信息
     * @return 退货应答信息
     */
    Result<CoreConsumeRefundResponse> coreConsumeRefund(CoreConsumeRefundRequest coreConsumeRefundRequest);

    /**
     * 商户D0实时入账至本行账户
     *
     * @param d0RealTimeEntryToBankAcctRequest 商户实时入账请求信息
     * @return 商户实时入账应答信息
     */
    Result<D0RealTimeEntryToBankAcctResponse> d0RealTimeEntryToBankAcct(D0RealTimeEntryToBankAcctRequest d0RealTimeEntryToBankAcctRequest);

    /**
     * 通用查证(交易状态查询)
     *
     * @param coreGeneralTransQueryRequest 通用查证请求信息
     * @return 通用查证应答
     */
    Result<CoreGeneralTransQueryResponse> coreGeneralTransQuery(CoreGeneralTransQueryRequest coreGeneralTransQueryRequest);

    /**
     * 通用转账
     *
     * @param coreGeneralAcctTransferRequest 通用转账请求信息
     * @return 通用转账应答
     */
    Result<CoreGeneralAcctTransferResponse> coreGeneralAcctTransfer(CoreGeneralAcctTransferRequest coreGeneralAcctTransferRequest);

    /**
     * 通用冲正
     *
     * @param coreGeneralAcctRevsalRequest 通用冲正请求信息
     * @return 通用冲正应答
     */
    Result<CoreGeneralAcctRevsalResponse> coreGeneralAcctRevsal(CoreGeneralAcctRevsalRequest coreGeneralAcctRevsalRequest);
}
